# -*- coding: utf-8 -*-
"""
Created on Sun Aug  6 22:33:27 2023

@author: skunk69
"""

import json

chinese_name = u'匹兹堡睡眠质量指数'
english_name = 'Pittsburgh Sleep Quality Index'
abbreviation = 'PSQI'
category = u'一般心理健康与行为问题量表'

outline = u"""匹兹堡睡眠质量指数（Pittsburgh Sleep Quality Index, PSQI）是美国匹兹堡大学精神科医生Buysse博士等人于1989年编制的。该量表适用于睡眠障碍患者、精神障碍患者评价睡眠质量，同时也适用于一般人睡眠质量的评估。刘贤臣等 于1996年将该量表翻译成中文，并对其进行了信度和效度研究，结果发现这一量表应用于国内也有很高的信效度。PSQI简单易行，信效度高，与多导睡眠脑电图测试结果有较高的相关性，已经成为国内外精神科临床评定的常用量表。"""

instruction = u"""下面一些问题是关于您最近1个月的睡眠情况，请选择或填写最符合您近1个月实际情况的答案。请回答下列问题！"""

with open('PSQI.txt','r',encoding='utf-8') as f:
    lines = f.readlines()
    f.close()

items = {}
for line in lines:
    key,value = line.strip().split('.',maxsplit=1)
    items[key] = value

reverse_items = []
scales = [u'睡眠质量',u'入睡时间',u'睡眠时间',u'睡眠效率',u'睡眠障碍',
          u'催眠药物',u'日间功能障碍']
scales_items = [
    [6], # 睡眠质量
    [2,'5a'], # 入睡时间
    [4],# 睡眠时间
    [1,3,4],# 睡眠效率
    ['5b','5c','5d','5e','5f','5g','5h','5i','5j'],# 睡眠障碍
    [7],# 催眠药物
    [8,9],# 日间功能障碍
    ]
factors = []
factors_scales = []
keys = list(items.keys())
rating = []
for i in range(len(keys)):
    rate = {}
    if i == 0:
        rate[keys[i]] = [u'',u'',u'',u'',]
    elif i == 1:
        rate[keys[i]] = [u'15分钟以内',u'16~30分钟',u'31~60分钟',u'60分钟以上',]      
    elif i == 2:
        rate[keys[i]] = [u'',u'',u'',u'',]      
    elif i == 3:
        rate[keys[i]] = [u'7小时以上',u'6~7小时',u'5~6小时',u'5小时以内',]          
    elif i < 14:
        rate[keys[i]] = [u'无',u'小于一次/周',u'一到二次/周',u'大于三次/周']
    elif i == 14:
        rate[keys[i]] = [u'很好',u'较好',u'较差',u'很差']
    elif i == 17:
        rate[keys[i]] = [u'没有',u'偶尔有',u'有时有',u'经常有']
    else:
        rate[keys[i]] = [u'无',u'小于一次/周',u'一到二次/周',u'大于三次/周']
    rating = rating+[rate]

score_rules = list(range(4))

contents = {
    'instruction':instruction,
    'items':items,
    'reverse_items':reverse_items,
    'scales':scales,
    'scales_items':scales_items,
    'factors':factors,
    'factors_scales':factors_scales,
    'rating':rating,
    'score_rules':score_rules
    }

implementation = u"""PSQI用于评定被试最近1个月的睡眠质量。参与计分的共18个自评条目。"""

reliability = u"""国内刘贤臣等（1996）通过采样分析，验证了该量表译本的内部一致性和重测相关系数都比较理想。"""
validity = u"""国内刘贤臣等对测试结果进行的因子分析结果表明，该量表有较好的构想效度。相关分析表明，PSQI与抑郁自评量表（SDS）和焦虑自评量表（SAS）的相关系数分别达到了0.43和0.42，这说明PSQI具有较好的效标关联效度。"""
measurements = {'reliability':reliability,'validity':validity}

interpretation = u"""18个条目组成7个成份，每个成份按0～3等级计分，累积各成份得分为PSQI总分，总分范围为0~21，得分越高，表示睡眠质量越差。各成份含意及计分方法如下：
A睡眠质量
根据条目6的应答计分“很好”计0分，“较好”计1分，“较差”计2分，“很差”计3分。
B入睡时间
1.条目2的计分为“≤15分”计0分，“16～30分”计1分，“31~60”计2分，“≥60分”计3分。
2.条目5a的计分为“无”计0分，“<1次/周”计1分，“1-2次/周”计2分，“≥3次/周”计3分。
3.累加条目2和5a的计分，若累加分为“0”计0分，“1~2”计1分，“3~4”计2分，“5~6”计3分。
C睡眠时间
根据条目4的应答计分，“>7小时”计0分，“6~7”计1分，“5~6”计2分，“<5小时”计3分。
D睡眠效率
1.床上时间=条目3（起床时间）-条目1（上床时间）
2.睡眠效率=条目4（睡眠时间）/床上时间×100%
3.成分D计分为：睡眠效率>85%计0分，75~84%计1分，65~74%计2分，<65%计3分。
E睡眠障碍
根据条目5b至5j的计分为“无”计0分，“<1周/次”计1分，“1~2 周/次”计2分，“≥3周/次”计3分。累加条目5b至5j的计分，若累加分为“0”则成分E计0分，“1~9”计1分，“10~18”计2分，“19~27”计3分。
F催眠药物
根据条目7的应答计分，“无”计0分，“<1周/次”计1分，“1~2周/次”计2分，“≥3周/次”计3分。
G日间功能障碍
⒈根据条目8的应答计分，“无”计0分，“<1周/次”计1分，“1~2周/次”计2分，“≥3周/次”计3分。
⒉根据条目9的应答计分，“没有”计0分，“偶尔有”计1分，“有时有”计2分，“经常有”计3分。
⒊累加条目8和9的得分，若累加分为“0”则成分G计0分，“1~2”计1分，“3~4”计2分，“5~6”计3分。

PSQI总分=成分A+成分B+成分C+成分D+成分E+成分F+成分G。"""

applications = u"""Buysse等确定PSQI总分5分为划界分，其灵敏度为89.6%，特异度为86.5%。国内以PSQI总分>7作为成人睡眠质量问题的参考划界分，以此划界标准对121例病人和112名正常成人分析发现，临床诊断和PSQI诊断的一致率较高，灵敏度和特异度分别达到98.3%和90.3%（刘贤臣等，1996）.这说明PSQI不仅对失眠症，且对伴有睡眠质量问题的疾病如各种抑郁症、焦虑症、神经衰弱等均有一定的辅助诊断价值。"""

this_scale = {
    'chinese_name':chinese_name,
    'english_name':english_name,
    'abbreviation':abbreviation,
    'category':category,
    'outline':outline,
    'contents':contents,
    'implementation':implementation,
    'measurements':measurements,
    'interpretation':interpretation,
    'applications':applications    
    }

with open(abbreviation+'.json','w+',encoding='utf-8') as f:
    json.dump(this_scale,f,indent=2,ensure_ascii=False)